#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include "stdafx.h"
#include "choose.h"
#include "game.h"

QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow; }
QT_END_NAMESPACE

class MyGLWidget;

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    MainWindow(QWidget *parent = nullptr);
    void mousePressEvent(QMouseEvent *event);
    void mouseReleaseEvent(QMouseEvent *event);
    void mouseDoubleClickEvent(QMouseEvent *event);
    void keyPressEvent(QKeyEvent *event);
    void paintEvent(QPaintEvent *event);
    void DoDraw();
    void StartGame(int lx);
    void SolveNd();
    void MakeBo(bool,int,int,int);
    int MakeGq(int gq);
    bool AddPlant(int x,int y);
    bool AddPlant(QPoint pt);
    bool AddJs(QPoint pt);
    void SetTimer(int id,int jg,int *nul);
    void KillTimer(int);
    void NewTimer(int id,int jg,int ne);
    bool DoTimer(int);
    void GenerateJs();
    void NextBo();
    void WanQuanTu();
    void Init();
    void InitZw();
    void InitJs();
    void Initicon();
    void ResetTimer();
    void Load(QDataStream &ar);
    void Save(QDataStream &ar);
    void ShowButton();
    void EnableButton();
    void DisableButton();
    QSize MSize(int x,int y);
    QPoint MPoint(int x,int y);
    QPoint SPoint(int x,int y);
    void left2048();
    void right2048();
    void up2048();
    void down2048();
    void SolveDz(QPoint pt);
    void WakeUp(int y);
    void HuiFang(bool hs);
    void SolveWSAD(int,int);
    void ChangeZw();
    void Retina();
    void SwitchSun();
    void ShowLife();
    int CalScore(QString &);
    void MakeImjs();
    ~MainWindow();

public:
    QTimer timer;
    QElapsedTimer tim;
    int m_gq,nxt_tmr,r_gq;//关卡，下一计时器，实际关卡
    CGame m_game;
    Plant plants[MAXSHU];
    Zombie zombies[MAXJSH];
    int tmr_cnt=0;//计时器数量
    MyTimer tmr[1010];
    int m_nd,m_n,lst_draw=0;//当前波数，僵尸种类数，上次绘制时间
    int m_time[MAXND];
    int m_jg[MAXND];
    int select;//选中的植物
    int sele_x,sele_y;//选中的位置
    int beans,bean_use;//能量豆数目
    int plt_cnt[ZGQS];//每关植物数
    double cd[MAXSHU];//恢复进度
    int m_xuan[MXUAN],x_js[MXUAN];//选择的植物，僵尸
    int zmb_p[MAXJSH];//僵尸概率
    int plt_p[MAXSHU];
    bool can_wat[20];//（僵尸）是否能进水
    double cd_spd[MAXSHU];//恢复速度
    int m_jwbs[MMN];//僵王血量
    int SHU,JSH,ND;//？，僵尸种类总数，波数
    bool is11,is12;//是否为两种BOSS关卡
    bool m_hbzw,isstop=false;//？，是否暂停
    int jd,tm;//僵尸数目（进度），计时器
    int m_lstJ[MMN];
    int m_lstC[MMN];
    int m_lstD[MMN];
    int m_lstT[MMN];
    int m_lstB[MMN];
    int m_lstZ[MMN];//以上为僵尸历史记录
    int m_shun[MAXSHU];//植物顺序
    int wsad[MAXSHU],wsad2[MAXSHU],j_yg[MAXJSH];//2种wsad，僵尸阳光
    int m_ztm,zom_cnt,m_ea,l48;//总时间，总僵尸数，难度，上次2048时间
    int l_x=0,l_y=0,y_sum,f_shu,z_fs,w_tm,h_sd,v_tm;//鼠标x，鼠标y（用于滑动），狂锤分数，待生成的化肥数目，剩余化肥数目，，回放速度，加速模式虚拟时间
    bool DOU,m_ai,m_hd,m_tui,m_b48,imjs,chui,mirr,b_rd,b_hui,b_ycl,b_fast,b_zhu,b_guan;
    //双倍，AI，困难，不可能，2048，我是僵尸，狂锤，镜面，回放，回放，预处理，短时，柱子，罐子
    bool isdb[MAXND];//是否为旗帜
    double zoom=1;//缩放比例
    QPixmap ico[200],ico_bl[200],ico_mir[200],ico_rd[200],icm_bl[200];//图标，蓝色图标，镜面图标，魅惑图标
    MyGLWidget *gl,*gx;//场地，选择栏
    int n_2048[MAXSHU]={0};//2048合成表
    QString font_fam;//字体名称
    int m_zf[10010],zf_len,sun_dou,sun_doued;//输入字符，长度，是否阳光双倍
    int tyToNum[100];bool show_life=false;//类型到下标，显示血量
    int b_ret=1;//retina
    int zmb_sum[MAXJSH],plt_sum[MAXSHU],stop_cnt;
    long long dis_sum;bool arc;
    int arc_tm[10000],arc_wz[10000],arc_ty[10000],arc_i,arc_cnt;
    bool keep[MMM][MMN],wait;
    int eat_cnt,eat_sum,dang_cnt;bool prot[MAXSHU];

public slots:
    void on_btc_clicked();
    void OnTimer();
    void on_stop_clicked();
    void on_lineEdit_textEdited(const QString &arg1);
    void on_save_clicked();
    void on_open_clicked();
    void on_Auto_stateChanged(int arg1);
    void on_buy_clicked();
    void on_quick_clicked();
    void jiasu();
    void jiansu();
    void ViewStatus();
    void Quit();
    void GameOver();
    void MakeGuan();
public:
    Ui::MainWindow *ui;
private slots:
    void on_huisu_clicked();
    void on_creative_stateChanged(int arg1);
};

class MyGLWidget : public QOpenGLWidget
{
public:
    MainWindow *m_wnd;
public:
  MyGLWidget(QWidget *parent) : QOpenGLWidget(parent) { }
  void paintEvent(QPaintEvent *e);
  QSize MSize(int x,int y);
  QPoint MPoint(int x,int y);
  int ty;
  ~MyGLWidget()
  {
      exit(0);
      makeCurrent();
      doneCurrent();
  }
protected:
  void initializeGL()
  {
  }

  void resizeGL(int w, int h)
  {
  }

  void paintGL()
  {
#ifndef Q_OS_ANDROID
      QOpenGLFunctions *f = QOpenGLContext::currentContext()->functions();
      f->glClear(GL_COLOR_BUFFER_BIT);
#endif
  }
};

#endif // MAINWINDOW_H
